pkg-types

Node.js utilities and TypeScript definitions for package.json
and tsconfig.json
.
Install
npx nypm install pkg-types
npm install pkg-types
yarn add pkg-types
pnpm install pkg-types
bun install pkg-types
deno install pkg-types
Usage
readPackageJSON
import { readPackageJSON } from "pkg-types";
const localPackageJson = await readPackageJSON();
const packageJson = await readPackageJSON("/fully/resolved/path/to/folder");
writePackageJSON
import { writePackageJSON } from "pkg-types";
await writePackageJSON("path/to/package.json", pkg);
resolvePackageJSON
import { resolvePackageJSON } from "pkg-types";
const filename = await resolvePackageJSON();
const packageJson = await resolvePackageJSON("/fully/resolved/path/to/folder");
readTSConfig
import { readTSConfig } from "pkg-types";
const tsconfig = await readTSConfig();
const tsconfig2 = await readTSConfig("/fully/resolved/path/to/folder");
writeTSConfig
import { writeTSConfig } from "pkg-types";
await writeTSConfig("path/to/tsconfig.json", tsconfig);
resolveTSConfig
import { resolveTSConfig } from "pkg-types";
const filename = await resolveTSConfig();
const tsconfig = await resolveTSConfig("/fully/resolved/path/to/folder");
resolveFile
import { resolveFile } from "pkg-types";
const filename = await resolveFile("README.md", {
startingFrom: id,
rootPattern: /^node_modules$/,
matcher: (filename) => filename.endsWith(".md"),
});
resolveLockFile
Find path to the lock file (yarn.lock
, package-lock.json
, pnpm-lock.yaml
, npm-shrinkwrap.json
, bun.lockb
, bun.lock
) or throws an error.
import { resolveLockFile } from "pkg-types";
const lockfile = await resolveLockFile(".");
findWorkspaceDir
Try to detect workspace dir by in order:
- Farthest workspace file (
pnpm-workspace.yaml
, lerna.json
, turbo.json
, rush.json
) - Closest
.git/config
file - Farthest lockfile
- Farthest
package.json
file
If fails, throws an error.
import { findWorkspaceDir } from "pkg-types";
const workspaceDir = await findWorkspaceDir(".");
resolveGitConfig
Finds closest .git/config
file.
import { resolveGitConfig } from "pkg-types";
const gitConfig = await resolveGitConfig(".")
readGitConfig
Finds and reads closest .git/config
file into a JS object.
import { resolveGitConfig } from "pkg-types";
const gitConfigObj = await readGitConfig(".")
writeGitConfig
Stringifies git config object into INI text format and writes it to a file.
import { writeGitConfig } from "pkg-types";
await writeGitConfig(".git/config", gitConfigObj)
parseGitConfig
Parses a git config file in INI text format into a JavaScript object.
import { parseGitConfig } from "pkg-types";
const gitConfigObj = parseGitConfig(gitConfigINI)
stringifyGitConfig
Stringifies a git config object into a git config file INI text format.
import { parseGitConfig } from "pkg-types";
const gitConfigINI = stringifyGitConfig(gitConfigObj)
Types
Note: In order to make types working, you need to install typescript
as a devDependency.
You can directly use typed interfaces:
import type { TSConfig, PackageJSON, GitConfig } from "pkg-types";
You can also use define utils for type support for using in plain .js
files and auto-complete in IDE.
import type { definePackageJSON } from 'pkg-types'
const pkg = definePackageJSON({})
import type { defineTSConfig } from 'pkg-types'
const pkg = defineTSConfig({})
import type { defineGitConfig } from 'pkg-types'
const gitConfig = defineGitConfig({})
Alternatives
License
Published under the MIT license.
Made by @pi0, @danielroe and community 💛